package com.qf.factory;

import javax.lang.model.element.NestingKind;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @Description: 公用常量
 * @Data: 2022/8/27 19:09
 * @Pacakge: com.qf.factory
 * @ClassName: BeanFactory02
 * @Author: fan
 * 工厂类2.0
 * 解决创建bean实例对象重复问题
 */
public class BeanFactory02 {
    private static Properties properties;
    private static Map<String,Object> beans;

    static {
        try {
            //获取输入流
            InputStream is = BeanFactory02.class.getClassLoader().getResourceAsStream("db.properties");
            //创建Properties对象
            properties = new Properties();
            //加载输入流
            properties.load(is);
            //初始化beans
            beans = new HashMap<String, Object>();
            //由于Properties本身就是一个Map,<k:v>
            //获取所有的键值keys
            Enumeration<Object> keys = properties.keys();
            //通过循环获取指定key的value值
            while (keys.hasMoreElements()) {//判断下一行元素有没有值
                //获取键值
                String key = keys.nextElement().toString();
                //通过键值获取其对应的value值
                String value = properties.getProperty(key);
                //通过反射创建对应实例
                Object o = Class.forName(value).newInstance();
                //将获取的对象存储到map中
                beans.put(key, o);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //获取bean实体类的方法
    public static Object getBean(String key){
        return beans.get(key);
    }
}
